/**
 * 20250309-day2
 * 这题写过：移动零——双指针（优选算法）
 */
//移动零
//https://leetcode.cn/problems/move-zeroes/?envType=study-plan-v2&envId=top-100-liked
public class No2 {
    public static void main(String[] args) {
        SolutionNo2 solution = new SolutionNo2();
        int[] arr = {1,2,3,0,5,0,7,0,9};
        solution.moveZeroes(arr);
        for(int i = 0; i<arr.length; i++){
            System.out.println(arr[i]);
        }
    }
}


class SolutionNo2 {// 25.3.9
    public void moveZeroes(int[] nums) {
        //
        int left = 0, right = 0;
        while(right < nums.length){
            while (left < nums.length) {
                if (nums[left] != 0) left++;
                else break;
            }
            right=left+1;
            while (right < nums.length) {
                if (nums[right] == 0) right++;
                else break;
            }

            if(left<nums.length&&right<nums.length){//优化：感觉，是否越界的条件判断，不用写这么多次。如何用一次就保证（或者很少的几次就能保证）
                int temp = nums[left];
                nums[left] = nums[right];
                nums[right] = temp;
                left++;
                right++;
            }
        }
    }
}

